package demo11;

import java.util.ArrayList;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        //1、创建泛型引用，创建泛型类对象的同时调用构造方法，从而创建泛型数组
        Fruit<String> strFruit = new Fruit<>(String.class,4); //String.class要和泛型引用类型相对应

        //2、使用泛型对象里的方法，填充数据
        strFruit.put(0,"苹果");
        strFruit.put(1,"香蕉");
        strFruit.put(2,"葡萄");

        //3、接收使用泛型对象里的方法返回的数据，并转为字符串打印
        String[] array = strFruit.getArray();
        System.out.println(Arrays.toString(array));

        System.out.println(strFruit.get(3));
    }

    public static void main2(String[] args) {
        //1、声明泛型集合，创建非泛型集合(顺序表集合)，并把顺序表集合赋值给泛型集合
        ArrayList<String>[] listArr = new ArrayList[5]; //创建泛型数组引用，对象要单独创建

        //ArrayList<Integer> intList = new ArrayList<>();
        //intList.add(25);
        //listArr[0] = intList;   //报错，发生泛型检查，检查出类型不匹配

        //2、声明泛型集合,创建泛型对象(顺序表)
        ArrayList<String> strList = new ArrayList<>();
        strList.add("zhangsan");

        //3、在泛型集合中填入顺序表
        listArr[0] = strList;     //类型检查后匹配，所以正常使用

        System.out.println(listArr[0]);

    }

    public static void main1(String[] args) {
        //说明：报错。可以声明带泛型的引用，但是不能直接创建带泛型的数组对象。
        //ArrayList<String>[] listArr = new ArrayList<String>[3];

        //1、创建非泛型ArrayList集合(顺序表集合)
        ArrayList[] list = new ArrayList[4];
        //2、声明泛型集合接收非泛型集合
        ArrayList<String>[] strList = list;

        //3、创建一个Integer类型的顺序表
        ArrayList<Integer> intList = new ArrayList<>();
        intList.add(25);
        intList.add(36);

        //4、将Integer类型的顺序表赋值给了<String>[]类型的泛型集合第一个位置
        // 但是类型不匹配却不报错，所以这种方法不合适
        list[0] = intList;
        System.out.println(strList[0]);
    }
}
